package functions;
import main.ContingencyTable;

public class CollectiveStrengthFunction extends GeneralFunction {

	public CollectiveStrengthFunction(String name) {
		super(name);
	}

	@Override
	public double calculate(ContingencyTable t) {
		return ((t.f11() + t.f00()) / (t.f1p() * t.fp1() + t.f0p() * t.fp0()))
				* ((t.N()*t.N() - t.f1p() * t.fp1() - t.f0p() * t.fp0()) / (t.N()
						- t.f11() - t.f00()));
	}
	
//	@Override
//	public double calculate(ContingencyTable t) {
//		return ((pXY(t) + p_Yc_X(t)) / pX(t) * pY(t) + p_X(t) * p_Y(t)) * 
//		((1 - pX(t) * pY(t) - p_X(t) * p_Y(t)) / (1 - pXY(t) - p_Yc_X(t)));
//	}
	
	private double pXY(ContingencyTable t) {
		return t.f11() / t.N();
	}

	private double p_X_Y(ContingencyTable t) {
		return t.f00() / t.N();
	}
	
	private double pX(ContingencyTable t) {
		return t.f1p() / t.N();
	}
	
	private double p_X(ContingencyTable t) {
		return t.f0p() / t.N();
	}
	
	private double pY(ContingencyTable t) {
		return t.fp1() / t.N();
	}
	
	private double p_Y(ContingencyTable t) {
		return t.fp0() / t.N();
	}

	// calculates P(!B | !A) = P(!B,!A) / P(!B)
	private double p_Yc_X(ContingencyTable t) {
		return t.f00() / t.fp0();
	}
}
